def tree_high(root):
    """
    计算二叉树的高度

    参数：
    - root：二叉树的根节点

    返回值：
    - 二叉树的高度
    """
    # 如果根节点为空，则树的高度为0
    if root is None:
        return 0

    # 如果根节点没有左子树和右子树，则树的高度为1
    if root.left is None and root.right is None:
        return 1
    # 如果根节点没有左子树，则树的高度为右子树的高度加1
    if root.left is None and root.right is not None:
        return 1 + tree_high(root.right)
    # 如果根节点没有右子树，则树的高度为左子树的高度加1
    if root.right is None and root.left is not None:
        return 1 + tree_high(root.left)

    # 如果根节点既有左子树又有右子树，则树的高度为左子树和右子树高度的最大值加1
    return 1 + max(tree_high(root.left), tree_high(root.right))


class TreeNode:
    def __init__(self, val=0, left=None, right=None):
        self.val = val
        self.left = left
        self.right = right

root = TreeNode(1)
root.left = TreeNode(2)
root.right = TreeNode(3)
root.left.right = TreeNode(5)

print(tree_high(root))  # 输出: 3

